home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / GNU_C++ / LIB / SRC / GEMLIB38.LZH / a_rect.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-07-10  |  1.6 KB  |  78 lines

  1. /*
  2.  *    Aes rectangle utils
  3.  *        rc_copy        copy grects
  4.  *         rc_equal    compare two grects
  5.  *              rc_intersect    check if two grects intersect, ret intersec
  6.  *              rc_union        union of two grects
  7.  *        grect_to_aray    convert GRECT to a vdi pxy style coordinate
  8.  *                array
  9.  *
  10.  *        ++jrb    bammi@cadence.com
  11.  *        modified: mj -- ntomczak@vm.ucs.ualberta.ca
  12.  */
  13. #include <macros.h>
  14. #include "gem.h"
  15.  
  16. int rc_copy(GRECT *src, GRECT *dst)
  17. {
  18.     *dst = *src;
  19.     return 1;
  20. }
  21.  
  22. int rc_equal(GRECT *p1, GRECT *p2) 
  23. {
  24.     return ((p1->g_x == p2->g_x) &&
  25.         (p1->g_y == p2->g_y) &&
  26.         (p1->g_w == p2->g_w) &&
  27.         (p1->g_h == p2->g_h));
  28. }
  29.  
  30.  
  31. int rc_intersect(GRECT *r1, GRECT *r2)
  32. {
  33.       int     tx, ty, tw, th, ret;
  34.     
  35.       tx = max (r2->g_x, r1->g_x);
  36.       tw = min (r2->g_x + r2->g_w, r1->g_x + r1->g_w) - tx;
  37.         ret = (0 < tw);
  38.       if (ret) 
  39.       {
  40.           ty = max (r2->g_y, r1->g_y);
  41.           th = min (r2->g_y + r2->g_h, r1->g_y + r1->g_h) - ty;
  42.           ret = (0 < th);
  43.           if (ret) 
  44.           {
  45.               r2->g_x = tx;
  46.               r2->g_y = ty;
  47.               r2->g_w = tw;
  48.               r2->g_h = th;
  49.           }
  50.       }
  51.       return (ret);
  52. }
  53.  
  54.  
  55. int *grect_to_array(GRECT *area, int *array)
  56. {
  57.     int *ip = array;
  58.  
  59.     *ip = area->g_x;
  60.     ip[2] = *ip;
  61.     ip++;
  62.     *ip = area->g_y;
  63.     ip[2] = *ip;
  64.     ip++;
  65.     *ip++ += area->g_w - 1;
  66.     *ip   += area->g_h - 1;
  67.     return (array);
  68. }
  69.  
  70.  
  71. void array_to_grect(int *array, GRECT *area)
  72. {
  73.     area->g_x = array[0];
  74.     area->g_y = array[1];
  75.     area->g_w = array[2] - array[0] + 1;
  76.     area->g_h = array[3] - array[1] + 1;
  77. }
  78.